package main

import "fmt"

type Person struct {
	Name string
}

// 给 Person 绑定方法
func (person Person) test() {
	fmt.Println(person.Name)
}
func (person Person) speak() {
	fmt.Println(person.Name, "speak...")
}
func (Person Person) cal(end int) int {
	res := 0
	for i := 0; i < end; i++ {
		res += i
	}
	//fmt.Println(res)
	return res
}

// 指针传递修改字段
func (person *Person) modify() {
	person.Name = "modify"
	fmt.Println(person.Name)    // modify
	fmt.Printf("%p \n", person) // 0x11006138
}

// 实现String方法
func (person *Person) String() string {
	str := fmt.Sprintf("Name=[%v]", person.Name)
	return str
}

func main() {
	p1 := Person{"zw"}
	p1.test()
	p1.speak()
	res := p1.cal(10)
	fmt.Println(res)
	p1.modify()
	fmt.Println(p1)          //{modify}
	fmt.Printf("%p \n", &p1) //0x11006138

	// 实现String 方法
	fmt.Println(&p1) //Name=[modify]
}
